home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 117 / af117a.adf / archives / af117a1.lzx / Fiasco_2.2 / Databases / Mailing List Archive / importmails.frx < prev    next >
Text File  |  1983-01-16  |  9KB  |  370 lines

  1. /* importmails.frx
  2.  * Copyright © 1998 Nils Bandener
  3.  * $VER: importmails_frx 8.5 (31.7.98)
  4.  */
  5.  
  6. /* Please specify here a name for the ARexx script:
  7.  */
  8.  
  9. scriptname = "Import Mails"
  10.  
  11. Options Results
  12. Parse Arg filename
  13.  
  14. /*
  15.  *  If not called from Fiasco, try to address the active
  16.  *  Fiasco project
  17.  */
  18.  
  19. if ~abbrev(address(), "FIASCO.") then
  20. do
  21.     /* Get list of all available ports */
  22.  
  23.     ports = show("Ports")
  24.  
  25.     /* Search for a port of Fiasco */
  26.  
  27.     do i = 1 to words(ports)
  28.  
  29.         if abbrev(word(ports, i), "FIASCO.") then
  30.         do
  31.             /* A port of Fiasco has been found.
  32.              * Now query Fiasco to return the port
  33.              * name of the active database.
  34.              */
  35.  
  36.             Address Value word(ports, i)
  37.  
  38.             GetAttr Project Name Active ARexx
  39.  
  40.             Address Value Result
  41.  
  42.             break
  43.         end
  44.     end
  45. end
  46.  
  47. fiasco_port = address()
  48.  
  49. Signal on Syntax
  50. Signal on Halt
  51. Signal on Break_C
  52. Signal on Failure
  53.  
  54. LockGUI
  55.  
  56. if filename = "" then
  57. do
  58.     RequestFile 'NoIcons var filename'
  59. end
  60.  
  61. if filename ~= "" then
  62. do
  63.     if open(f, filename, "r") then
  64.     do
  65.         header = 1
  66.         body = ""
  67.  
  68.         /*
  69.          *  Insert record at the end of the database
  70.          */
  71.  
  72.         CountRecords 'var insertrec'
  73.  
  74.         AddRecord 'Inactive Record ' || insertrec || ' Var recnum'
  75.  
  76.         do while ~eof(f)
  77.  
  78.             ln = readln(f)
  79.  
  80.             if header then
  81.             do
  82.                 /* Parsing of RFC messages
  83.                  */
  84.  
  85.                 if upper(left(ln, 5)) = "FROM:" then
  86.                 do
  87.                     val = strip(substr(ln, 7), 'B', '"')
  88.  
  89.                     SetField 'From Record ' || recnum || ' "' || val || '"'
  90.                 end
  91.                 else if upper(left(ln, 11)) = "MESSAGE-ID:" then
  92.                 do
  93.                     val = substr(ln, 13)
  94.  
  95.                     val = strip(val, "L", "<")
  96.                     val = strip(val, "T", ">")
  97.  
  98.                     SetField 'MessageID Record ' || recnum || ' "' || val || '"'
  99.                 end
  100.                 else if upper(left(ln, 8)) = "SUBJECT:" then
  101.                 do
  102.                     val = substr(ln, 10)
  103.  
  104.                     SetField 'Subject Record ' || recnum || ' "' || val || '"'
  105.                 end
  106.                 else if upper(left(ln, 5)) = "DATE:" then
  107.                 do
  108.                     val = substr(ln, 7)
  109.  
  110.                     spos = pos(",", val)
  111.  
  112.                     if spos ~= 0 then
  113.                     do
  114.                         val = substr(val, spos + 2)
  115.                     end
  116.  
  117.                     dateday = word(val, 1)
  118.  
  119.                     datemonthstr  = word(val, 2)
  120.  
  121.                     dateyear = word(val, 3)
  122.  
  123.                     if datemonthstr = "Jan" then
  124.                         datemonth = 1
  125.  
  126.                     else if datemonthstr = "Feb" then
  127.                         datemonth = 2
  128.  
  129.                     else if datemonthstr = "Mar" then
  130.                         datemonth = 3
  131.  
  132.                     else if datemonthstr = "Apr" then
  133.                         datemonth = 4
  134.  
  135.                     else if datemonthstr = "May" then
  136.                         datemonth = 5
  137.  
  138.                     else if datemonthstr = "Jun" then
  139.                         datemonth = 6
  140.  
  141.                     else if datemonthstr = "Jul" then
  142.                         datemonth = 7
  143.  
  144.                     else if datemonthstr = "Aug" then
  145.                         datemonth = 8
  146.  
  147.                     else if datemonthstr = "Sep" then
  148.                         datemonth = 9
  149.  
  150.                     else if datemonthstr = "Oct" then
  151.                         datemonth = 10
  152.  
  153.                     else if datemonthstr = "Nov" then
  154.                         datemonth = 11
  155.  
  156.                     else if datemonthstr = "Dec" then
  157.                         datemonth = 12
  158.  
  159.                     dateval = dateday || "." || datemonth || "." || dateyear
  160.  
  161.                     timeval = word(val, 4)
  162.  
  163.                     SetField 'Date Record ' || recnum || ' "' || dateval || '"'
  164.                     SetField 'Time Record ' || recnum || ' "' || timeval || '"'
  165.  
  166.                 end
  167.                 else if upper(left(ln, 12)) = "IN-REPLY-TO:" then
  168.                 do
  169.                     val = substr(ln, 14)
  170.  
  171.                     val = strip(val, "L", "<")
  172.                     val = strip(val, "T", ">")
  173.  
  174.                     SetField 'Reference Record ' || recnum || ' "' || val || '"'
  175.                 end
  176.                 else if upper(left(ln, 11)) = "REFERENCES:" then
  177.                 do
  178.                     val = substr(ln, 13)
  179.  
  180.                     val = strip(val, "L", "<")
  181.                     val = strip(val, "T", ">")
  182.  
  183.                     SetField 'Reference Record ' || recnum || ' "' || val || '"'
  184.                 end
  185.  
  186.                 /* Parsing of ZCONNECT messages
  187.                  */
  188.  
  189.                 else if left(ln, 4) = "ABS:" then
  190.                 do
  191.                     val = substr(ln, 5)
  192.  
  193.                     SetField 'From Record ' || recnum || ' "' || val || '"'
  194.                 end
  195.                 else if left(ln, 4) = "MID:" then
  196.                 do
  197.                     val = substr(ln, 5)
  198.  
  199.                     SetField 'MessageID Record ' || recnum || ' "' || val || '"'
  200.                 end
  201.                 else if left(ln, 4) = "BET:" then
  202.                 do
  203.                     val = substr(ln, 5)
  204.  
  205.                     SetField 'Subject Record ' || recnum || ' "' || val || '"'
  206.                 end
  207.                 else if left(ln, 4) = "EDA:" then
  208.                 do
  209.                     val = substr(ln, 5)
  210.  
  211.                     dateval = substr(val, 7, 2) || "." || substr(val, 5, 2) || "." || substr(val, 1, 4)
  212.                     timeval = substr(val, 9, 2) || ":" || substr(val, 11, 2) || ":" || substr(val, 13, 2)
  213.  
  214.                     SetField 'Date Record ' || recnum || ' "' || dateval || '"'
  215.                     SetField 'Time Record ' || recnum || ' "' || timeval || '"'
  216.                 end
  217.                 else if left(ln, 4) = "BEZ:" then
  218.                 do
  219.                     val = substr(ln, 5)
  220.  
  221.                     SetField 'Reference Record ' || recnum || ' "' || val || '"'
  222.                 end
  223.                 else if length(ln) = 0 then
  224.                 do
  225.                     header = 0
  226.                 end
  227.             end
  228.             else
  229.             do
  230.                 /*
  231.                  *  Escape *, " and newlines
  232.                  */
  233.  
  234.                 p = 1
  235.  
  236.                 do forever
  237.  
  238.                     p = pos('*', ln, p)
  239.  
  240.                     if p ~= 0 then do
  241.  
  242.                         ln = substr(ln, 1, p - 1) || '**' || substr(ln, p + 1)
  243.  
  244.                         p = p + 2
  245.  
  246.                     end
  247.                     else break
  248.  
  249.                 end
  250.  
  251.  
  252.                 p = 1
  253.  
  254.                 do forever
  255.  
  256.                     p = pos('"', ln, p)
  257.  
  258.                     if p ~= 0 then do
  259.  
  260.                         ln = substr(ln, 1, p - 1) || '*"' || substr(ln, p + 1)
  261.  
  262.                         p = p + 2
  263.  
  264.                     end
  265.                     else break
  266.  
  267.                 end
  268.  
  269.                 body = body || ln || "*n"
  270.             end
  271.         end
  272.  
  273.         SetField 'MailBody Record ' || recnum || ' "' || body || '"'
  274.  
  275.         GetField 'From Record ' || recnum || ' var from'
  276.  
  277.         realname = from
  278.         email = from
  279.  
  280.         openbracket = pos("(", from)
  281.  
  282.         if openbracket ~= 0 then
  283.         do
  284.             closebracket = pos(")", from, openbracket)
  285.  
  286.             if closebracket ~= 0 then
  287.             do
  288.                 realname = substr(from, openbracket + 1, closebracket - openbracket - 1)
  289.                 email = trim(substr(from, 1, openbracket - 1))
  290.             end
  291.  
  292.         end
  293.         else
  294.         do
  295.             openbracket = pos("<", from)
  296.  
  297.             if openbracket ~= 0 then
  298.             do
  299.                 closebracket = pos(">", from, openbracket)
  300.  
  301.                 realname = substr(from, 1, openbracket - 1)
  302.  
  303.                 email = substr(from, openbracket + 1, closebracket - openbracket - 1)
  304.             end
  305.  
  306.         end
  307.  
  308.         SetField 'RealName Record ' || recnum || ' "' || realname || '"'
  309.         SetField 'EMail Record ' || recnum || ' "' || email || '"'
  310.  
  311.  
  312.         call close(f)
  313.     end
  314.     else
  315.     do
  316.         RequestChoice '"Could not open file" "Cancel"'
  317.     end
  318.  
  319. end
  320.  
  321.  
  322.  
  323. bail_out:
  324.  
  325. Address Value fiasco_port
  326.  
  327. UnlockGUI
  328. ResetStatus
  329.  
  330. exit
  331.  
  332. syntax:
  333. failure:
  334.  
  335. if show("Ports", fiasco_port) then
  336. do
  337.     Address Value fiasco_port
  338.  
  339.     RequestChoice '"Error ' || rc || ' in line ' || sigl || ':*n' || errortext(rc) || '" "Cancel" Title "' || scriptname || '"'
  340. end
  341. else
  342. do
  343.     say "Error" rc "in line" sigl ":" errortext(rc)
  344.     say "Enter to continue"
  345.     pull dummy
  346. end
  347.  
  348. call bail_out
  349.  
  350. halt:
  351. break_c:
  352.  
  353. if show("Ports", fiasco_port) then
  354. do
  355.     Address Value fiasco_port
  356.  
  357.     RequestChoice '"Script Abort Requested" "Abort Script" Title "' || scriptname || '"'
  358. end
  359. else
  360. do
  361.     say "*** Break"
  362.     say "Enter to continue"
  363.     pull dummy
  364. end
  365.  
  366. call bail_out
  367.  
  368.  
  369.  
  370.